home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / akcl / akcl.lha / akcl / V / c / main.c < prev    next >
C/C++ Source or Header  |  1990-02-15  |  10KB  |  701 lines

  1. Changes file for /usr/local/src/kcl/c/main.c
  2. Created on Thu Feb 15 09:56:57 1990
  3. Usage \n@s[Original text\n@s|Replacement Text\n@s]
  4. See the file rascal.ics.utexas.edu:/usr2/ftp/merge.c
  5. for a program to merge change files.  Anything not between
  6. "\n@s[" and  "\n@s]" is a simply a comment.
  7. This file was constructed using emacs and  merge.el
  8. Enhancements Copyright (c) W. Schelter All rights reserved.
  9.    by (Bill Schelter)  wfs@carl.ma.utexas.edu 
  10.  
  11.  
  12. ****Change:(orig (11 11 a))
  13. @s[    IMPLEMENTATION-DEPENDENT
  14. */
  15.  
  16.  
  17. @s|    IMPLEMENTATION-DEPENDENT
  18. */
  19.  
  20. #define IN_MAIN
  21.  
  22. #ifdef KCLOVM
  23. #include <ovm/ovm.h>
  24. void change_contexts();
  25. int ovm_process_created; 
  26. void initialize_process();
  27. #endif
  28.  
  29.  
  30. @s]
  31.  
  32.  
  33. ****Change:(orig (12 12 a))
  34. @s[#include "include.h"
  35.  
  36. @s|#include "include.h"
  37. #ifdef UNIX
  38. #include <signal.h>
  39. int segmentation_catcher();
  40. #endif
  41.  
  42. @s]
  43.  
  44.  
  45. ****Change:(orig (13 13 a))
  46. @s[
  47.  
  48. @s|
  49.  
  50.  
  51. @s]
  52.  
  53.  
  54. ****Change:(orig (17 17 a))
  55. @s[#ifdef BSD
  56. #include <sys/time.h>
  57.  
  58. @s|#ifdef BSD
  59. #include <sys/time.h>
  60. #ifndef SGI
  61.  
  62. @s]
  63.  
  64.  
  65. ****Change:(orig (19 19 a))
  66. @s[#include <sys/resource.h>
  67. #endif
  68.  
  69. @s|#include <sys/resource.h>
  70. #endif
  71. #endif
  72.  
  73. @s]
  74.  
  75.  
  76. ****Change:(orig (30 33 d))
  77. @s[object siVsystem_directory;
  78. #ifdef UNIX
  79. char *kcl_self;
  80. #endif
  81.  
  82. @s|
  83. @s]
  84.  
  85.  
  86. ****Change:(orig (34 34 a))
  87. @s[
  88.  
  89. @s|
  90.  
  91.  
  92.  
  93. @s]
  94.  
  95.  
  96. ****Change:(orig (48 52 d))
  97. @s[int ARGC;
  98. char **ARGV;
  99. #ifdef UNIX
  100. char **ENVP;
  101.  
  102. @s,#endif
  103.  
  104. @s|
  105. @s]
  106.  
  107.  
  108. ****Change:(orig (57 57 a))
  109. @s[static object module_data;
  110.  
  111. @s|static object module_data;
  112. static object siLmultiply_stacks;
  113. int stack_multiple=1;
  114.  
  115. @s]
  116.  
  117.  
  118. ****Change:(orig (74 74 a))
  119. @s[#endif
  120. {
  121.     FILE *i;
  122. #ifdef BSD
  123.  
  124. @s|#endif
  125. {
  126.     FILE *i;
  127. #ifdef BSD
  128. #ifndef SGI
  129.  
  130. @s]
  131.  
  132.  
  133. ****Change:(orig (76 76 a))
  134. @s[    struct rlimit rl;
  135. #endif
  136.  
  137. @s|    struct rlimit rl;
  138. #endif
  139. #endif
  140.  
  141. @s]
  142.  
  143.  
  144. ****Change:(orig (139 139 a))
  145. @s[    }
  146.  
  147.     GBC_enable = FALSE;
  148.  
  149.  
  150. @s|    }
  151.  
  152.     GBC_enable = FALSE;
  153.  
  154.     vs_org = value_stack;
  155.  
  156. @s]
  157.  
  158.  
  159. ****Change:(orig (141 141 a))
  160. @s[    vs_limit = &vs_org[VSSIZE];
  161.  
  162. @s|    vs_limit = &vs_org[VSSIZE];
  163.     clear_stack(vs_top,vs_limit);
  164.     frs_org = frame_stack;
  165.  
  166. @s]
  167.  
  168.  
  169. ****Change:(orig (143 143 a))
  170. @s[    frs_limit = &frs_org[FRSSIZE];
  171.  
  172. @s|    frs_limit = &frs_org[FRSSIZE];
  173.     bds_org = bind_stack;
  174.  
  175. @s]
  176.  
  177.  
  178. ****Change:(orig (145 145 a))
  179. @s[    bds_limit = &bds_org[BDSSIZE];
  180.  
  181. @s|    bds_limit = &bds_org[BDSSIZE];
  182. #ifdef KCLOVM
  183.     bds_save_org = save_bind_stack;
  184.     bds_save_top = bds_save_org - 1;
  185.     bds_save_limit = &bds_save_org[BDSSIZE];
  186. #endif
  187.     ihs_org = ihs_stack;
  188.  
  189. @s]
  190.  
  191.  
  192. ****Change:(orig (150 150 a))
  193. @s[    cs_org = &argc;
  194.  
  195.     cssize = CSSIZE;
  196.  
  197. @s|    cs_org = &argc;
  198.  
  199.     cssize = CSSIZE;
  200. #ifdef SIGSEGV
  201.      (void) signal(SIGSEGV,segmentation_catcher);
  202. #endif
  203.  
  204. @s]
  205.  
  206.  
  207. ****Change:(orig (152 152 a))
  208. @s[
  209. #ifdef BSD
  210.  
  211. @s|
  212. #ifdef BSD
  213. #ifdef RLIMIT_STACK
  214.  
  215. @s]
  216.  
  217.  
  218. ****Change:(orig (154 154 a))
  219. @s[    cssize = rl.rlim_cur/4 - 4*CSGETA;
  220.  
  221. @s|    cssize = rl.rlim_cur/4 - 4*CSGETA;
  222. #endif    
  223.  
  224. @s]
  225.  
  226.  
  227. ****Change:(orig (187 187 a))
  228. @s[        siVlisp_maxpages->s.s_dbind = make_fixnum(real_maxpage);
  229.         initflag = TRUE;
  230.  
  231. @s|        siVlisp_maxpages->s.s_dbind = make_fixnum(real_maxpage);
  232.         initflag = TRUE;
  233. #ifdef KCLOVM
  234.         ovm_user_context_change = change_contexts;
  235.         ovm_user_context_initialize = initialize_process;
  236.  
  237.         v_init_processes();
  238.         ovm_process_created = 1;
  239. #endif
  240.           again:
  241.  
  242. @s]
  243.  
  244.  
  245. ****Change:(orig (188 188 a))
  246. @s[        super_funcall(siStop_level);
  247.  
  248. @s|        super_funcall(siStop_level);
  249.         if (type_of(siLmultiply_stacks->s.s_dbind)==t_fixnum)
  250.           {multiply_stacks(fix(siLmultiply_stacks->s.s_dbind));
  251.            goto  again;}
  252.  
  253.  
  254. @s]
  255.  
  256.  
  257. ****Change:(orig (335 340 d))
  258. @s[#ifdef AOSVS
  259.  
  260.  
  261.  
  262. #endif
  263.  
  264.  
  265. @s|
  266. @s]
  267.  
  268.  
  269. ****Change:(orig (351 351 a))
  270. @s[    init_sequence_function();
  271.  
  272. @s|    init_sequence_function();
  273. #ifdef KCLOVM
  274.     init_socket_function();
  275. #endif    
  276.  
  277. @s]
  278.  
  279.  
  280. ****Change:(orig (363 367 d))
  281. @s[#endif
  282. #ifdef AOSVS
  283.  
  284.  
  285. #endif
  286.  
  287.  
  288. @s|#endif
  289.  
  290. @s]
  291.  
  292.  
  293. ****Change:(orig (388 388 a))
  294. @s[    init_main();
  295.  
  296.     init_format();
  297.  
  298. @s|    init_main();
  299.  
  300.     init_format();
  301.     init_links();
  302.  
  303. @s]
  304.  
  305.  
  306. ****Change:(orig (390 392 c))
  307. @s[
  308. #ifdef AOSVS
  309.  
  310. #endif
  311.  
  312. @s|
  313.     init_fat_string();
  314. #ifdef CMAC
  315.     init_cmac();
  316. #endif    
  317.  
  318. @s]
  319.  
  320.  
  321. ****Change:(orig (450 450 c))
  322. @s[    if (vs_limit > vs_org + VSSIZE)
  323.  
  324. @s|    if (vs_limit > vs_org + stack_multiple *  VSSIZE)
  325.  
  326. @s]
  327.  
  328.  
  329. ****Change:(orig (455 455 a))
  330. @s[    FEerror("Value stack overflow.", 0);
  331. }
  332.  
  333.  
  334. @s|    FEerror("Value stack overflow.", 0);
  335. }
  336.  
  337.  
  338.  
  339. @s]
  340.  
  341.  
  342. ****Change:(orig (459 459 c))
  343. @s[    if (bds_limit > bds_org + BDSSIZE)
  344.  
  345. @s|    if (bds_limit > bds_org + stack_multiple *  BDSSIZE)
  346.  
  347. @s]
  348.  
  349.  
  350. ****Change:(orig (468 468 c))
  351. @s[    if (frs_limit > frs_org + FRSSIZE)
  352.  
  353. @s|    if (frs_limit > frs_org + stack_multiple *  FRSSIZE)
  354.  
  355. @s]
  356.  
  357.  
  358. ****Change:(orig (477 477 c))
  359. @s[    if (ihs_limit > ihs_org + IHSSIZE)
  360.  
  361. @s|    if (ihs_limit > ihs_org + stack_multiple *  IHSSIZE)
  362.  
  363. @s]
  364.  
  365.  
  366. ****Change:(orig (482 482 a))
  367. @s[    FEerror("Invocation history stack overflow.", 0);
  368. }
  369.  
  370.  
  371. @s|    FEerror("Invocation history stack overflow.", 0);
  372. }
  373.  
  374. segmentation_catcher()
  375. {int x;
  376.  if (&x < cs_limit)
  377.     cs_overflow();
  378.  else 
  379.   {printf("Segmentation violation: c stack ok:signalling error");
  380.     }
  381.   error("segmentation violation");
  382. }
  383.  
  384.  
  385. @s]
  386.  
  387.  
  388. ****Change:(orig (502 502 a))
  389. @s[    error("end of file");
  390. }
  391.  
  392.  
  393. @s|    error("end of file");
  394. }
  395.  
  396.  
  397. int sgc_enabled;
  398. int catch_fatal=1;
  399.  
  400. @s]
  401.  
  402.  
  403. ****Change:(orig (504 504 a))
  404. @s[error(s)
  405. {
  406.  
  407. @s|error(s)
  408. {
  409.         if (catch_fatal>0 && interrupt_enable )
  410.       {catch_fatal = -1;
  411. #ifdef SIGSEGV
  412.     if (sgc_enabled==0)
  413.       (void) signal(SIGSEGV,segmentation_catcher);
  414. #endif
  415.        FEerror("Caught fatal error [memory may be damaged]"); }
  416.  
  417. @s]
  418.  
  419.  
  420. ****Change:(orig (621 621 a))
  421. @s[        FEerror("Value stack is flawed.", 0);
  422.     vs_base[0] = Cnil;
  423. }
  424.  
  425.  
  426. @s|        FEerror("Value stack is flawed.", 0);
  427.     vs_base[0] = Cnil;
  428. }
  429.  
  430. object
  431. siLcatch_fatal(i)
  432. {catch_fatal=i;
  433.  return Cnil;}
  434.  
  435.  
  436.  
  437. @s]
  438.  
  439.  
  440. ****Change:(orig (625 626 c))
  441. @s[    if (vs_top < vs_org + VSSIZE)
  442.         vs_limit = vs_org + VSSIZE;
  443.  
  444. @s|    if(catch_fatal <0) catch_fatal=1;
  445.     if (vs_top < vs_org + stack_multiple *  VSSIZE)
  446.         vs_limit = vs_org + stack_multiple *  VSSIZE;
  447.  
  448. @s]
  449.  
  450.  
  451. ****Change:(orig (629 630 c))
  452. @s[    if (bds_top < bds_org + BDSSIZE)
  453.         bds_limit = bds_org + BDSSIZE;
  454.  
  455. @s|    if (bds_top < bds_org + stack_multiple *  BDSSIZE)
  456.         bds_limit = bds_org + stack_multiple *  BDSSIZE;
  457.  
  458. @s]
  459.  
  460.  
  461. ****Change:(orig (633 634 c))
  462. @s[    if (frs_top < frs_org + FRSSIZE)
  463.         frs_limit = frs_org + FRSSIZE;
  464.  
  465. @s|    if (frs_top < frs_org + stack_multiple *  FRSSIZE)
  466.         frs_limit = frs_org + stack_multiple *  FRSSIZE;
  467.  
  468. @s]
  469.  
  470.  
  471. ****Change:(orig (637 638 c))
  472. @s[    if (ihs_top < ihs_org + IHSSIZE)
  473.         ihs_limit = ihs_org + IHSSIZE;
  474.  
  475. @s|    if (ihs_top < ihs_org + stack_multiple *  IHSSIZE)
  476.         ihs_limit = ihs_org + stack_multiple *  IHSSIZE;
  477.  
  478. @s]
  479.  
  480.  
  481. ****Change:(orig (653 653 a))
  482. @s[        error("can't reset cs_limit");
  483.     vs_base[0] = Cnil;
  484. }
  485.  
  486.  
  487. @s|        error("can't reset cs_limit");
  488.     vs_base[0] = Cnil;
  489. }
  490.  
  491. #define COPYSTACK(org,p,typ,lim,top,geta,size) \
  492.  do{int leng,topl;      \
  493.   bcopy(org,p,leng=(stack_multiple*size*sizeof(typ))); \
  494.   topl= top - org; \
  495.   org=(typ *)p; top = org +topl;\
  496.   p=p+leng+2*geta*sizeof(typ); \
  497.   lim = ((typ *)p) - 2*geta;   \
  498.   }while (0)
  499.  
  500. multiply_stacks(m)
  501.      int m;
  502. {  static object stack_space;
  503.    int n;
  504.    object x;
  505.    object gc_pro=stack_space;
  506.    char *p;
  507.    int vs,bd,frs,ihs;
  508.    stack_multiple=stack_multiple*m;
  509. #define ELTSIZE(x) (((char *)((x)+1)) - ((char *) x))
  510.    vs  = (stack_multiple*VSSIZE  + 2*VSGETA)* ELTSIZE(vs_org);
  511.    bd  = (stack_multiple*BDSSIZE + 2*BDSGETA)*ELTSIZE(bds_org);
  512.    frs = (stack_multiple*FRSSIZE + 2*FRSGETA)*ELTSIZE(frs_org);
  513.    ihs = (stack_multiple*IHSSIZE + 2*IHSGETA)*ELTSIZE(ihs_org);
  514.    if (stack_space==0) {enter_mark_origin(&stack_space);}
  515.    stack_space = alloc_simple_string(vs+bd+frs+ihs);
  516.    array_allocself(stack_space,1,code_char(0));
  517.    p=stack_space->st.st_self;
  518.    COPYSTACK(vs_org,p,object,vs_limit,vs_top,VSGETA,VSSIZE);
  519.    COPYSTACK(bds_org,p,struct bds_bd,bds_limit,bds_top,BDSGETA,BDSSIZE);
  520.    COPYSTACK(frs_org,p,struct frame,frs_limit,frs_top,FRSGETA,FRSSIZE);
  521.    COPYSTACK(ihs_org,p,struct invocation_history,ihs_limit,ihs_top,
  522.          IHSGETA,IHSSIZE);
  523.    vs_base=vs_top;
  524.    return stack_multiple;
  525.  }
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.   
  534.  
  535.  
  536. @s]
  537.  
  538.  
  539. ****Change:(orig (702 702 c))
  540. @s[    GBC(t_contiguous);
  541.  
  542. #ifdef BSD
  543.  
  544. @s|    GBC(t_contiguous);
  545.  
  546.  
  547.  
  548. #if defined(BSD) || defined(ATT)  
  549.  
  550. @s]
  551.  
  552.  
  553. ****Change:(orig (703 703 a))
  554. @s[    brk(core_end);
  555.  
  556. @s|    brk(core_end);
  557.   /* printf( "(breaking at core_end = %x in main ,)",core_end); */
  558.  
  559. @s]
  560.  
  561.  
  562. ****Change:(orig (766 766 a))
  563. @s[            make_simple_string(system_directory));
  564.  
  565. @s|            make_simple_string(system_directory));
  566.     {object features;
  567.  
  568. @s]
  569.  
  570.  
  571. ****Change:(orig (768 770 c))
  572. @s[    make_special("*FEATURES*",
  573.              make_cons(make_ordinary("COMMON"),
  574.              make_cons(make_ordinary("KCL"), Cnil)));
  575.  
  576. @s|#define ADD_FEATURE(name) \
  577.      features=  make_cons(make_ordinary(name),features)
  578.  
  579. @s]
  580.  
  581.  
  582. ****Change:(orig (772 779 c))
  583. @s[#ifdef VAX
  584.     make_special("*FEATURES*",
  585.              make_cons(make_ordinary("VAX"),
  586.              make_cons(make_ordinary("UNIX"),
  587.  
  588. @s,             make_cons(make_ordinary("KCL"), Cnil))))));
  589. #endif
  590.  
  591. @s|       features=    make_cons(make_ordinary("COMMON"),
  592.              make_cons(make_ordinary("KCL"), Cnil));
  593.      ADD_FEATURE("AKCL");     
  594.  
  595. @s]
  596.  
  597.  
  598. ****Change:(orig (781 789 c))
  599. @s[#ifdef SUN
  600.     make_special("*FEATURES*",
  601.              make_cons(make_ordinary("SUN"),
  602.              make_cons(make_ordinary("MC68K"),
  603.  
  604. @s,             make_cons(make_ordinary("KCL"), Cnil))))))));
  605.  
  606. @s|#ifdef UNIX
  607.     ADD_FEATURE("UNIX");
  608.  
  609. @s]
  610.  
  611.  
  612. ****Change:(orig (791 800 c))
  613. @s[
  614. #ifdef SUN2R3
  615.     make_special("*FEATURES*",
  616.              make_cons(make_ordinary("SUN"),
  617.  
  618. @s,             make_cons(make_ordinary("KCL"), Cnil))))))));
  619.  
  620. @s|#ifdef IEEEFLOAT
  621.        ADD_FEATURE("IEEE-FLOATING-POINT");
  622.  
  623. @s]
  624.  
  625.  
  626. ****Change:(orig (802 811 c))
  627. @s[
  628. #ifdef SUN3
  629.     make_special("*FEATURES*",
  630.              make_cons(make_ordinary("SUN"),
  631.  
  632. @s,             make_cons(make_ordinary("KCL"), Cnil))))))));
  633.  
  634. @s|#ifdef SGC
  635.        ADD_FEATURE("SGC");
  636. #endif     
  637. #ifdef  ADDITIONAL_FEATURES
  638.                       ADDITIONAL_FEATURES;
  639.  
  640. @s]
  641.  
  642.  
  643. ****Change:(orig (813 822 c))
  644. @s[
  645. #ifdef NEWS
  646.     make_special("*FEATURES*",
  647.              make_cons(make_ordinary("NEWS"),
  648.  
  649. @s,             make_cons(make_ordinary("KCL"), Cnil))))))));
  650.  
  651. @s|#ifdef  BSD
  652.     ADD_FEATURE("BSD");
  653.  
  654. @s]
  655.  
  656.  
  657. ****Change:(orig (823 823 a))
  658. @s[#endif
  659.  
  660. @s|#endif
  661.     make_special("*FEATURES*",features);}
  662.  
  663. @s]
  664.  
  665.  
  666. ****Change:(orig (825 902 d))
  667. @s[#ifdef ISI
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676. #endif
  677.  
  678. @s,#ifdef AOSVS
  679.  
  680.  
  681.  
  682.  
  683.  
  684. #endif
  685.  
  686.  
  687. @s|
  688. @s]
  689.  
  690.  
  691. ****Change:(orig (903 903 a))
  692. @s[    make_si_function("SAVE-SYSTEM", siLsave_system);
  693.  
  694. @s|    make_si_function("SAVE-SYSTEM", siLsave_system);
  695.     make_si_sfun("CATCH-FATAL",siLcatch_fatal,ARGTYPE1(f_fixnum));
  696.     siLmultiply_stacks=make_si_special("*MULTIPLY-STACKS*",Cnil);
  697.     
  698.  
  699. @s]
  700.  
  701.